En Ruby, avanzar más allá de la ruta óptima significa pasar de un razonamiento lineal a una postura defensiva donde los fallos se tratan como objetos de primera clase en lugar de catástrofes que terminan el programa.
1. La jerarquía de excepciones
Ruby define de forma predeterminada una jerarquía ordenada de excepciones mostrada en la Figura 8.1. Cada error es una instancia de una clase dentro de este árbol, comenzando por el Exception raíz. Comprender este árbol es fundamental: los errores de nivel de aplicación generalmente derivan de StandardError, mientras que los fallos de nivel de sistema (como NoMemoryError) derivan directamente de Exception.
2. Errores como objetos de datos
A diferencia de los lenguajes de bajo nivel donde un error podría ser simplemente un código de retorno, Ruby empaqueta contexto—incluyendo la cadena de mensaje y el seguimiento de ejecución—dentro de un objeto formal. Esto permite a los desarrolladores tratar las interrupciones en tiempo de ejecución como datos que pueden inspeccionarse y gestionarse mediante herencia.